package com.c2b.algorithm.leetcode.base;

import java.util.HashSet;
import java.util.Set;

/**
 * <a href='https://leetcode.cn/problems/greatest-english-letter-in-upper-and-lower-case/'>兼具大小写的最好英文字母(Greatest English Letter in Upper and Lower Case)</a>
 * <p>给你一个由英文字母组成的字符串 s ，请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母，则返回一个空字符串。</p>
 * <p>最好 英文字母的大写和小写形式必须 都 在 s 中出现。</p>
 * <p>英文字母 b 比另一个英文字母 a 更好 的前提是：英文字母表中，b 在 a 之 后 出现。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：s = "lEeTcOdE"
 *      输出："E"
 *      解释：
 *          字母 'E' 是唯一一个大写和小写形式都出现的字母。
 *
 * 示例 2：
 *      输入：s = "arRAzFif"
 *      输出："R"
 *      解释：
 *          字母 'R' 是大写和小写形式都出现的最好英文字母。
 *          注意 'A' 和 'F' 的大写和小写形式也都出现了，但是 'R' 比 'F' 和 'A' 更好。
 *
 * 示例 3：
 *      输入：s = "AbCdEfGhIjK"
 *      输出：""
 *      解释：
 *          不存在大写和小写形式都出现的字母。
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *  <ul>
 *      <li>1 <= s.length <= 1000</li>
 *      <li>s 由小写和大写英文字母组成</li>
 *  </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/19 17:03
 */
public class LC2309GreatestEnglishLetterInUpperAndLowerCase_S {

    static class Solution {
        public String greatestLetter(String s) {
            Set<Character> set = new HashSet<>();
            for (char ch : s.toCharArray()) {
                set.add(ch);
            }
            for (int i = 25; i >= 0; --i) {
                if (set.contains((char) ('a' + i)) && set.contains((char) ('A' + i))) {
                    return String.valueOf((char) ('A' + i));
                }
            }
            return "";
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.greatestLetter("lEeTcOdE"));
        System.out.println(solution.greatestLetter("arRAzFif"));
        System.out.println(solution.greatestLetter("AbCdEfGhIjK"));
    }
}
